﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using Grupo2.Persistencia;

// CROJASB NO TOCAR....!!! (2)
namespace Grupo2.Negocio
{
    public class PublicacionService
    {
        // No hay dependencias, utilizamos las DAO ya definidas en forma directa

        // Mapeo de funcionalidades
        public Aviso RegistrarAviso(  Int32     id_ofertante
                                    , String    puesto_trabajo
                                    , DateTime  fecha_publicacion
                                    , String    condicion_publicacion
                                    , String    localidad
                                    , String    rango_sueldo
                                    , String    modalidad_trabajo
                                    , String    idioma
                                    , String    nivel_academico
                                    , String    carreras_afines
                                    , Int32     dias_vigencia
                                    , String    horario_trabajo
                                    , String    periodo_contrato
                                    , String    principales_funciones
                                    , Int32     nro_vacantes
                                    )
        {
            // Validación de Puesto de trabajo
            if (null == puesto_trabajo || String.Empty.Equals(puesto_trabajo))
                throw new Exception("El dato PUESTO DE TRABAJO es obligatorio");
            // Validación de Fecha de publicacion
            if (null == fecha_publicacion)
                throw new Exception("La fecha de publicacion es obligatoria");
            // Validación de Condicion de publicacion
            if (condicion_publicacion != "S" & condicion_publicacion != "N")
                throw new Exception("Debe indicar una Condicion de publicacion...");
            // Validación de Dias de vigencia
            if (dias_vigencia < 0)
                throw new Exception("Los dias deben ser mayores a cero.");
            // Validacion de existencia de Ofertante
            OfertanteDAO ofertanteDAO = new OfertanteDAO();
            Ofertante ofertanteExistente = ofertanteDAO.ObtenerOfertante(id_ofertante);
            if (null == ofertanteExistente)
                throw new Exception("El Ofertante NO EXISTE...");
            
            // Generar nueva secuencia para aviso
            AvisoDAO avisoDAO = new AvisoDAO();
            
            Aviso aviso = new Aviso();
//             aviso.Id_Aviso = Convert.ToInt32(avisoDAO.ObtenerID());
            aviso.Id_Aviso = 1;
            aviso.Ofertante = ofertanteExistente;
            aviso.Puesto_Trabajo = puesto_trabajo;
            aviso.Fecha_Publicacion = fecha_publicacion;
            aviso.Condicion_Publicacion = condicion_publicacion;
            aviso.Localidad = localidad;
            aviso.Rango_Sueldo = rango_sueldo;
            aviso.Modalidad_Trabajo = modalidad_trabajo;
            aviso.Idioma = idioma;
            aviso.Nivel_Academico = nivel_academico;
            aviso.Carreras_Afines = carreras_afines;
            aviso.Dias_Vigencia = dias_vigencia;
            aviso.Horario_Trabajo = horario_trabajo;
            aviso.Periodo_Contrato = periodo_contrato;
            aviso.Numero_Vacantes = nro_vacantes;
            
            Aviso avisoCreado = avisoDAO.CrearAviso(aviso);
            return avisoCreado;
        }

        public Aviso ModificarAviso(  Int32     id_aviso
                                    , Int32     id_ofertante
                                    , String    puesto_trabajo
                                    , DateTime  fecha_publicacion
                                    , String    condicion_publicacion
                                    , String    localidad
                                    , String    rango_sueldo
                                    , String    modalidad_trabajo
                                    , String    idioma
                                    , String    nivel_academico
                                    , String    carreras_afines
                                    , Int32     dias_vigencia
                                    , String    horario_trabajo
                                    , String    periodo_contrato
                                    , String    principales_funciones
                                    , Int32     nro_vacantes
                                    )
        {
            // Validacion de existencia de Aviso
            AvisoDAO avisoDAO = new AvisoDAO();
            Aviso avisoExistente = avisoDAO.ObtenerAviso(id_aviso);
            if (null == avisoExistente)
                throw new Exception("El Aviso NO EXISTE...");

            // Validación de Puesto de trabajo
            if (null == puesto_trabajo || String.Empty.Equals(puesto_trabajo))
                throw new Exception("El dato PUESTO DE TRABAJO es obligatorio");
            // Validación de Fecha de publicacion
            if (null == fecha_publicacion)
                throw new Exception("La fecha de publicacion es obligatoria");
            // Validación de Condicion de publicacion
            if (condicion_publicacion != "S" & condicion_publicacion != "N")
                throw new Exception("Debe indicar una Condicion de publicacion...");
            // Validación de Dias de vigencia
            if (dias_vigencia < 0)
                throw new Exception("Los dias deben ser mayores a cero.");
            // Validacion de existencia de Ofertante
            OfertanteDAO ofertanteDAO = new OfertanteDAO();
            Ofertante ofertanteExistente = ofertanteDAO.ObtenerOfertante(id_ofertante);
            if (null == ofertanteExistente)
                throw new Exception("El Ofertante NO EXISTE...");
            
            Aviso aviso = new Aviso();
            aviso = avisoExistente;
            aviso.Ofertante = ofertanteExistente;
            aviso.Puesto_Trabajo = puesto_trabajo;
            aviso.Fecha_Publicacion = fecha_publicacion;
            aviso.Condicion_Publicacion = condicion_publicacion;
            aviso.Localidad = localidad;
            aviso.Rango_Sueldo = rango_sueldo;
            aviso.Modalidad_Trabajo = modalidad_trabajo;
            aviso.Idioma = idioma;
            aviso.Nivel_Academico = nivel_academico;
            aviso.Carreras_Afines = carreras_afines;
            aviso.Dias_Vigencia = dias_vigencia;
            aviso.Horario_Trabajo = horario_trabajo;
            aviso.Periodo_Contrato = periodo_contrato;
            aviso.Numero_Vacantes = nro_vacantes;
            
            Aviso avisoModificado = avisoDAO.ModificarAviso(aviso);
            return avisoModificado;
        }

        public Aviso EliminarAviso(Int32 id_aviso)
        {
            // Validacion de existencia de Aviso
            AvisoDAO avisoDAO = new AvisoDAO();
            Aviso avisoExistente = avisoDAO.ObtenerAviso(id_aviso);
            if (null == avisoExistente)
                throw new Exception("El Aviso NO EXISTE...");

            OfertanteDAO ofertanteDAO = new OfertanteDAO();
            Ofertante ofertanteExistente = ofertanteDAO.ObtenerOfertante(avisoExistente.Ofertante.Id_Ofertante);
            Aviso aviso = new Aviso();
            aviso = avisoExistente;
            
            avisoDAO.EliminarAviso(aviso.Id_Aviso);
            return aviso;
        }

        public Ofertante ListarAvisos(Int32 id_ofertante)
        {
            return null;
        }
    }
}